/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.cax.utils;

import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

/**
 * @author yk
 * @desc 文件类型工具
 * @date 2024-06-18 17:09
 */
public class FileUtils {

    private static final Map<String, String> FILE_TYPE_EXTENSIONS = new HashMap<>();

    static {
        FILE_TYPE_EXTENSIONS.put("STEP", ".step");
        FILE_TYPE_EXTENSIONS.put("OBJ", ".obj");
        FILE_TYPE_EXTENSIONS.put("BDF", ".bdf");
        FILE_TYPE_EXTENSIONS.put("INP", ".inp");
        FILE_TYPE_EXTENSIONS.put("OP2", ".op2");
        FILE_TYPE_EXTENSIONS.put("VTK", ".vtk");
    }

    /**
     * 验证文件扩展名
     *
     * @param fileType 文件类型
     * @param file     文件
     * @return boolean
     */
    public static boolean isValidFileTypeBySuffix(String fileType, MultipartFile file) {
        String fileName = file.getOriginalFilename();
        if (fileName == null) {
            return false;
        }

        String expectedSuffix = FILE_TYPE_EXTENSIONS.get(fileType.toUpperCase());
        return fileName.endsWith(expectedSuffix);
    }

    /**
     * 根据文件类型获取文件扩展名
     *
     * @param fileType 文件类型
     * @return 文件扩展名
     */
    public static String getFileTypeBySuffix(String fileType) {
        return FILE_TYPE_EXTENSIONS.get(fileType.toUpperCase());
    }

    /**
     * 根据文件名获取扩展名称
     *
     * @param fileName 文件名称
     * @return 扩展名
     */
    public static String getFileExt(String fileName) {
        int pos = fileName.lastIndexOf(".");
        if (pos > -1) {
            return fileName.substring(pos + 1).toLowerCase();
        }
        return "";
    }

    /**
     * 替换文件后缀名
     *
     * @param filePath     文件路径
     * @param newExtension 新后缀
     * @return 新文件路径
     */
    public static String changeFileExtension(String filePath, String newExtension) {
        int extensionIndex = filePath.lastIndexOf('.');
        if (extensionIndex == -1) {
            // 如果原始路径中没有点，则直接在末尾添加新后缀
            return filePath + "." + newExtension;
        } else {
            // 如果找到了点，则替换点及之后的部分为新后缀
            return filePath.substring(0, extensionIndex) + "." + newExtension;
        }
    }
}
